Skip to content

Conversation

@ethancrawford
Copy link
Collaborator

@ethancrawford ethancrawford commented Oct 9, 2020

This PR includes changes that add two new Synths to Sonic Pi, that both generate sound by running simulations that emulate emergent behaviour:

  • :automatone uses an elementary cellular automaton algorithm in combination with additive synthesis to generate a series of combined frequency partials that can be manipulated in various ways in the frequency domain.
  • :flock uses a flocking algorithm to generate a series of frequencies that are modulated in one of several ways by the simulation.

Several changes have been necessary to introduce these new synths:

  • updates have been made to the synth opt validation code to handle new types of opt values.
  • the source code for a new set of UGens, (along with supporting files coming from the SuperCollider project), has been added directly into the tree and integrated into the Sonic Pi build process, as these new UGens were custom built specifically for these new synths.

Several things remain to be done before I consider the new synths ready to release:

  • the build process for the new UGens needs to be added for macOS
  • the build process for the new UGens needs to be more thoroughly tested (particularly MacOS and (non-Raspberry Pi) Linux).
  • License details or inclusion of third party supporting files may need to be tweaked a little if I haven't done it correctly
  • The synths themselves might need a little tweaking if things like volume aren't right or any glitches are present

Note that the large number of files in this PR is partially to do with the addition of bits of SuperCollider's source code - various header files that uGen development appears to depend on.

Note also that this is currently marked as a draft PR, as there may be several tweaks that may be desired as mentioned above - but I can "un-draft" it if preferred.

@ethancrawford ethancrawford marked this pull request as draft October 9, 2020 13:49
@ethancrawford ethancrawford changed the base branch from main to dev August 13, 2021 13:59
@ethancrawford ethancrawford force-pushed the add_emergent_synths branch 2 times, most recently from f6505a8 to 9b9efb4 Compare September 29, 2021 08:11
This adds the synthdefs as well as the supporting files and code.
The docs, synthdef files, and UGens have been updated.
Still to come are prebuilt binaries of the UGens for 32 bit Windows, and MacOS.
This allows validations for co-dependent synth opts, where valid values for one
opt depend on the values of another.
Extra handling has also been added for the array value of the :automatone
synth's initial_row: opt to allow checking the validity of each of the array
items.
The default value of the note_mod_source: opt is more interesting when set to 3.
This add the source into the GUI external components folder along with the
necessary updates to the existing build scripts.
TODO: pass extra UGens path to scsynth on Linux
The recent changes to separate api files into a separate directory and
restructure the app tree mean that it has been necessary to move these
supercollider plugin related files to match.
This is apparently just an optional extra for increased performance on specific
types of hardware.
It's possibly not needed, and may not be supported on platforms such as the
Raspberry Pi.
If necessary, we can potentially add it back in in a targeted manner.
This adds instructions to pre-build the emergent behaviour synth Ugen plugins on
mac, and updates the corresponding instructions on Linux to account for the new
path to the native plugins.
The hope is to distribute these synths with the upcoming v4.0 release, so the
version introduced data have been updated. Also, some code indentation has been
fixed.
This brings the script into line with previous changes made by Sam.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant